export default {
	
	// 检测密码强度
	checkPwd (str) {
	  if (str.length <= 0) {
	  	alert('密码不得为空')
	  	return
	  } else if (str.length < 6) {
	  	alert('密码长度不得小于6位')
	  	return
	  } else if(!(/^(?=.*?[0-9])(?=.*?[a-z])[0-9a-z]{6,}$/)) {
	    alert('密码必须是字母+数字的组合')
	    return
	  }else if (/[~!@#$%^&*()_+`\-={}:";'<>?,.\/]/.test(str)) {
	    alert('密码不能有特殊字符')
	    return
	  }
	},
	
  // 邮箱
  isEmail (s) {
    return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
  },
	
  // 手机号码
  isMobile (s) {
    return /^1[0-9]{10}$/.test(s)
  },
	
  // 电话号码
  isPhone (s) {
    return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
  },
	
	// 严格的身份证校验
	IDCardCheck(num) {
	    num = num.toUpperCase();
	    //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。   
	    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
	        console.log('输入的身份证号长度不对，或者号码不符合规定！\n15位号码应全为数字，18位号码末位可以为数字或X。');
	        return false;
	    }
	    //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
	    //下面分别分析出生日期和校验位 
	    let len, re;
	    len = num.length;
	    if (len == 15) {
	        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
	        let arrSplit = num.match(re);
	
	        //检查生日日期是否正确 
	        let dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
	        let bGoodDay;
	        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
	        if (!bGoodDay) {
	            console.log('输入的身份证号里出生日期不对！');
	            return false;
	        }
	        else {
	            //将15位身份证转成18位 
	            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
	            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
	            let nTemp = 0, i;
	            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
	            for (i = 0; i < 17; i++) {
	                nTemp += num.substr(i, 1) * arrInt[i];
	            }
	            num += arrCh[nTemp % 11];
	            return true;
	        }
	    }
	    if (len == 18) {
	        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
	        let arrSplit = num.match(re);
	
	        //检查生日日期是否正确 
	        let dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
	        let bGoodDay;
	        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
	        if (!bGoodDay) {
	           // alert(dtmBirth.getYear());
	          //  alert(arrSplit[2]);
	            console.log('输入的身份证号里出生日期不对！');
	            return false;
	        }
	        else {
	            //检验18位身份证的校验码是否正确。 
	            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
	            let valnum;
	            let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	            let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
	            let nTemp = 0, i;
	            for (i = 0; i < 17; i++) {
	                nTemp += num.substr(i, 1) * arrInt[i];
	            }
	            valnum = arrCh[nTemp % 11];
	            if (valnum != num.substr(17, 1)) {
	                console.log('18位身份证的校验码不正确！'); //应该为： + valnum
	                return false;
	            }
	            return true;
	        }
	    }
	    return false;
	},
  // 是否url地址
  isURL (s) {
    return /^http[s]?:\/\/.*/.test(s)
  },
	
  // 是否字符串
  isString (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'String'
  },
	
  // 是否数字
  isNumber (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
  },
	
  // 是否boolean
   isBoolean (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
  },
	
  // 是否函数
  isFunction (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
  },
	
  // 是否为null
  isNull (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
  },
	
  // 是否undefined
  isUndefined (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
  },
	
  // 是否对象
  isObj (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
  },
	
  // 是否数组
  isArray (o) {
    return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
  },
	
  // 是否是移动端
  isDeviceMobile () {
    return /android|webos|iphone|ipod|balckberry/i.test(ua)
  },
	
  // 是否ios
  isIos () {
    var u = navigator.userAgent;
    if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {  //安卓手机
        return false
    } else if (u.indexOf('iPhone') > -1) {//苹果手机
        return true
    } else if (u.indexOf('iPad') > -1) {//iPad
        return false
    } else if (u.indexOf('Windows Phone') > -1) {//winphone手机
        return false
    } else {
        return false
    }
  },
	
  //是否为PC端
  isPC () {
    var userAgentInfo = navigator.userAgent;
    var Agents = ["Android", "iPhone",
        "SymbianOS", "Windows Phone",
        "iPad", "iPod"];
    var flag = true;
    for (var v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = false;
            break;
        }
    }
    return flag;
 },
 

	
// 获取url参数
  getQueryString (name) {
    const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    const search = window.location.search.split('?')[1] || '';
    const r = search.match(reg) || [];
    return r[2];
  },
	
  // 滚动到顶部
  scrollToTop () {
    const c = document.documentElement.scrollTop || document.body.scrollTop;
    if (c > 0) {
        window.requestAnimationFrame(scrollToTop);
        window.scrollTo(0, c - c / 8);
    }
  },

  
	
  // 随机数范围
  random (min, max) {
    if (arguments.length === 2) {
        return Math.floor(min + Math.random() * ((max + 1) - min))
    } else {
        return null;
    }
  },
 
  // 判断一个元素是否在数组中
  contains (arr, val) {
    return arr.indexOf(val) != -1 ? true : false;
  },
	
  // 数组排序，{type} 1：从小到大 2：从大到小 3：随机
  sort (arr, type = 1) {
    return arr.sort((a, b) => {
        switch (type) {
            case 1:
                return a - b;
            case 2:
                return b - a;
            case 3:
                return Math.random() - 0.5;
            default:
                return arr;
        }
    })
  },
	
  // 去重
  unique (arr) {
    if (Array.hasOwnProperty('from')) {
        return Array.from(new Set(arr));
    } else {
        var n = {}, r = [];
        for (var i = 0; i < arr.length; i++) {
            if (!n[arr[i]]) {
                n[arr[i]] = true;
                r.push(arr[i]);
            }
        }
        return r;
    }
  },

  // 删除其中一个元素
  remove (arr, ele) {
    var index = arr.indexOf(ele);
    if (index > -1) {
        arr.splice(index, 1);
    }
    return arr;
  },
	
  // 最大值
  max (arr) {
    return Math.max.apply(null, arr);
  },
	
  // 最小值
  min (arr) {
    return Math.min.apply(null, arr);
  },
	
  // 求和
  sum (arr) {
    return arr.reduce((pre, cur) => {
        return pre + cur
    })
  },
	
  // 平均值
  average (arr) {
    return this.sum(arr) / arr.length
  },
	
  // 去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格
  trim (str, type) {
    type = type || 1
    switch (type) {
        case 1:
            return str.replace(/\s+/g, "");
        case 2:
            return str.replace(/(^\s*)|(\s*$)/g, "");
        case 3:
            return str.replace(/(^\s*)/g, "");
        case 4:
            return str.replace(/(\s*$)/g, "");
        default:
            return str;
    }
  }
}